Делать 1 большую таблицу или разбивать на части?
Чтобы не громоздить тонны колонок и делать по канонам 3 нормальной формы —  разделяют сущности, атрибуты и их значения отдельно.
Свойства обычно хранят отдельно( у них могут быть свои поля)
а значения к ним  тоже отдельно (EAV)product_id, feature_id, value (где featured_id — id свойства из таблички выше)пример с моего интернет-магазина — 1 товар, много характеристикПример запроса:SELECT   p.id, p.url, p.name
FROM e_products p		
WHERE 1 
AND p.id in (SELECT product_id FROM e_options WHERE feature_id=8 AND value in('Бежевый','Белый') )
AND p.id in (SELECT product_id FROM e_options WHERE feature_id=1 AND value in('Лето 2011') )время выполнения запроса — 0.019 s для 10 тыс товаров, 100тыс значений свойств и десятка свойств
В запросе два параметра фильтра (1 значение коллекции и 2 значений цвета, выше можете увидеть в табличке)
как понимаете — строку с нужным свойством подставляете в зависимости от GET запроса...* Можно упростить — вместо feature_id хранить сразу название параметра, но лучше сразу разделите... чтобы можно было параметру поставить напрмиер поле включать или нет его в фильтр и задать порядок, или нужно будет выводить поля в саму форму фильтра (гонять большую таблицу — так себе решение)
Смотря какой объем вы хотите хранить. одну большую таблицу со всеми полями точно хранить не стоит. Если среднее значение объектов до 1млн. то отлично подойдет EAV. Если больше (все условно) возможно правильнее будет JSON.