EAV to poprawna opcja — może być złożona i niewygodna w przypadku tego, co faktycznie staje się niewpisanymi danymi.
XML z XPath też byłby opcją: http://dev.mysql.com/tech-resources/articles/xml-in-mysql5.1-6.0.html
Myślę, że większość przypadków wymagałaby wygenerowania dynamicznego kodu SQL, jeśli pola do przeszukania mogą się różnić.