какой ресурс уходит ? если только CPU - то с уверенностью 99% можно сказать что это проблема отсутствия индексов, в частности выполнение операций над join-ами без индексов или вообще не индексируемых операция в запросах. подход один - поиск тяжелых запросов и их оптимизация.
если и диск тоже - тут сложнее, надо детально смотреть из-за чего она его напрягает.
defaultStringLength - используют для другого - что бы при дефолтной миграции указать длину строки (что бы она влезала в индекс)
ларавель ничего не знает о размере поля. это вам не джанго. поэтому весь контроль ложится на вас . добавьте в метод save вашей модели контроль длины требуемых полей (substring)
если тебе не важно нативное поведение button и a (а судя по вопросу тебе это не важно) и ты обрабатываешь события через js - то вообще пофиг что там будет. хоть div
кроме одного момента: SEO - робот обходит <a href=''>, а нажатия кнопок и js - нет
я в такой же ситуации ввел валидацию номера телефона и ограничение на размер корзины "разумными рамками". ну и онлайн оплата само собой, либо резервирование на длительный срок после созвона с оператором.