Насколько эффективная такая схема работы и как ее улучшить?
Вне всякого сомнения EAV штука полезная. Но стоит задуматься о целесообразности перевода обсолютно всех характеристик в EAV. На примере той же даты рождения: в EAV значения атрибутов будут либо все строковые, либо бинарные, как отследить всех тех кто родился в СССР? на лету конвертирывать данные в DATE и потом делать отбор? А как делать выборку по числовым значениям, сортировку? Все же стоит набор основных характеристик оставить в обычном строковом представлении.

Обновление данных вообще геморой.
1. Считать все строки совподающие по user_id (сохранить данные в сессию)
2. Распечатать форму
3. Построково сверить данные из сессии с данными из формы.
3.а. новые атрибуты (нет данных в сессии/дб) агрегирывать и вставлять одним запросом
3.б. обнуленные атрибуты агрегирывать и либо удалять, либо апдейтить в эмпти стринг по желанию
3.в. изменные построково апдейт.

может стоит посотреть в сторону NoSQL/schemaless?
были посты на хабре, сфинкс вам в помощ
Неудобно будет, что числа (год рождения), даты (дата регистрации) и строки (firstname) хранятся в одной колонке, и всякие фильтрации по годам придётся вести как со строками.