C'è un modo, ma diventa più costoso più aggiungi campi. La stessa cosa si verifica con molti CMS che scelgono di memorizzare dati utente aggiuntivi in quella forma.
Puoi ottenere un SQL di ricerca funzionante usando questo:
SELECT
users.*,
firstname.data AS firstname,
lastname.data AS lastname,
eyecolor.data AS eyecolor,
FROM
users
LEFT JOIN completed_form_fields AS firstname ON firstname.userid = users.id AND firstname.fieldkey = "firstname"
LEFT JOIN completed_form_fields AS lastname ON lastname.userid = users.id AND lastname.fieldkey = "lastname"
LEFT JOIN completed_form_fields AS eyecolor ON eyecolor.userid = users.id AND eyecolor.fieldkey = "eyecolor"
WHERE
firstname.data LIKE '%searchdata%'
OR lastname.data LIKE '%searchdata%'
OR eyecolor.data LIKE '%searchdata%'
Questo metodo diventa molto grande e costoso per il server MySQL quanto più si aggiungono tabelle. Pertanto, consiglierei di non superare i 10-15 join in questo modo e, di nuovo, lo profilo per essere sicuro.