Проблема EAV в том, что каждое поле лежит независимо от объекта. Т.е. выборка 10-ти объектов, из 10-ти полей, сделает около 100 random seek. Варианты решения:
1. Memory таблицы — быстрый random seek, ограниченный размер и необходимость синхронизации с реальными данными.
2. Sphinx и ему подобные. Дополнительно храним данные в формате, более удобном для фасеточного поиска.
3. nosql — легче масштабировать, данные зачастую хранятся в памяти, отсутствие схемы, но при этом с возможностью создания индексов по полям.