В базе у пользователя добавляем поле type там храним 1,2,15 и т.д. То есть пользователей с типом 1 отправляем в 1 кабинет, с типом 2 в другой.
Далее насколько все разное, это могут быть разные модули, разные actions или контролеры или вообще разные app на разных поддоменах. Тут уже смотрите сами.
Если есть поля для БД отличные друг от друга. Делаем отдельные таблицы под каждый вид. И связи в моделе user + метод getData который будет возвращать данный в зависимости от типа пользователя дергая ту или иную связь.
Формы регистрации в этом случае будут разные естественно. И каждой из них будет соответствовать своя модель.