Как быстрее/правильнее загружать данные?
Пара кейсов, после которых идея "передать на фронт и фильтровать там" перестает казаться такой хорошей
1) Прилетел массив на 10 000 элементов. Клиент зашел с Samsung galaxy S2 , попробовал загрузить/фильтрануть, посмотрел, как завис браузер, и ушел. Не забывайте, что не все пользователи сидят с десктопов как у разработчиков с 16-32Gb оперативы. Мобилка может поперхнуться банально из-за большого json-а
2) Как только потребуется сделать паджинацию -  фильтрация на фронте станет выдавать неожиданно некорректные данные
Пинайте сервер-сайд, пусть разрабы или кэшируют, или расставят индексы в базе правильно, если у них SQL, или перейдут на подходящий поисковый движок с фасетным поиском
Я верю, что можно сделать выдачу и фильтрацию чисто на фронте с любым количеством элементов, если команда состоит из сплошных ниндзя и рокстаров, но практика в 3 подобные ситуации показывает, что в итоге эту фильтрацию придется переписывать как минимум на гибридную (и поддерживать 2 решения, на фронте для малого количества записей, и на бэке для большого), либо полностью на сервер сайд, так как к сожалению команда никогда не состоит из идеальных разработчиков, чаще из обычных живых людей
И как привильно делать такие каталоги при небольшом количестве элементов (меньше 1000) и большом(больше 10000)?
Разбивка по страницам каталога. Фильтрация по 1 кнопке, а не при каждом изменении формы. Далее смотреть структуру запросов к БД.