Если я правильно понял суть.
То я делал подобную вещь, вот пример - фильтры букетов
www.florist.ru
Не знаю насколько изящно мое решение, но суть такая:
- берем список всех комбинаций различных параметров (кроме взаимоисключающих, конечно)
- строим предрасчитанный индекс - грубо говоря высчитываем список из id товаров в каждой комбинации и сохраняем его (в файл или базу)
- далее пользователь выбирает параметры, мы выполняя поиск по выбранным параметрам, получаем какой-то набор id товаров. Ищем пересечение полученного списка с заранее предрасчитанными комбинациями. Если пересечение не пустое - фильтр остается активным, иначе фильтр становится неактивным.
Минус - нужно время от времени пересчитывать индекс при изменении каких-то параметров у товаров.
По производительности будет зависеть от конкретных случаев применения.