ventacom, чет тяжело так. Надо запросы оптимизировать в первую очередь. думаю, так будет быстрее -
SELECT p.id, p.name, COUNT(`pp`.`id`) FROM product p
INNER JOIN product_param pp ON p.id = pp.product.id
GROUP BY p.id, p.name
Потом, если данные нужны дополнительные, то предыдущий запрос можно обернуть в JOIN.
Сама идея с json поиском - в будущем только усложнит вашу работу, это сейчас вам кажется, что легко, а через полгода придется переписывать в нормальный вариант, когда уже не сможете поддерживать.
Если mysql для вас кажется медленным, то попробуйте кэшировать результаты. С помощью REDIS к примеру. Лет 8 назад видел на хабре статью, там подобный EAV фильтр делали на bitmaps. Вот нашел кстати - https://habr.com/ru/articles/261137/
Хранение на сервере данных - еще может давать крутой плюс в виде прогрева клиента.
Простой пример - вы статистикой замечаете, что пользователь смотрит один и тот же товар уже 5 дней из 7.
Ну так дайте ему скидку в 5-10%, и этот лид ваш вместе с регистрацией и другой механикой прогрева.