Постановка задачи слишком размыта.
Вполне может оказаться, что в Вашем случае лучшим будет даже EAV.
Вообще общий подход — составляем несколько списков полей для разных видов данных.
Потом находим общие поля, пытаемся максимально объединить.
Имеем некий «родительский класс» и некий набор расширений.
Далее что у нас в каждом поле лежит? Не целесообразно ли из этого сделать справочник? (например сотрудники, районы, виды недвижимости и т.п.). На самом деле вопрос не очевидный. Иногда проще сделать перечисление или текстовое поле.
Некоторые поля из разных «классов» можно хранить в одном и том же поле базы если это не противоречит логике поиска (К примеру название поставщика или его ФИО в случае Юрлица или Физлица как правило является одним полем).
Когда мы получаем некий каркас надо трезво посмотреть на этот ужас и ответить — а все ли они нам нужны?
Если по полю не будет поиска или сортировки, то возможно стоит несколько таких полей объединить в одно поле «описание» которое заполняется по шаблону при вводе, или содержит сериализованный массив.
Часто целесообразно общую часть данных вынести в общую таблицу, а для каждого «класса» сделать отдельную таблицу со ссылкой на главную. Типа «объекты недвижимости, подробности квартир, подробности домов, подробности участков земли».