по подсчету - ну ты получаешь массив выбранных фильтров, и применяй их sql-запросом последовательно.
например, если у тебя запросили фильтрацию, чоб в fields с ID=500 было значение 100500 и product_fields был 64, а метро ID=128
то соберется примерно такой sql:
select
count(DISTINCT p.ID)
from
products p
join folder_fields ff on p.folder_id = ff.folder_id
join fileds f on ff.field_id = f.id
join product_fields pf on pf.product_id = p.id
where 1=1
and f.id=500
and f.name=100500
and pf.value=64
and p.metro_id=128
а скрывать лишнее - фильтр должен реагировать на уже сделанный выбор...
например, пользователь хочет компьютеры - выводишь фильтры по процессорам / видеокартам и т.п., хочет смартфоны - производителя и операционку ну и в таком духе.
можно ajax'ом, можно сразу захардкодить эту вложенность и грузить ее пользователю json'ом...