Не хотелось бы хранить все эти учетные записи в одной таблице users, тут явно нужно разделение
Почему? Если они отличаются только ролью, то это не верно разбивать на разные таблицы, при чем с какой стороны не посмотри. Как минимум как Вы будете однозначно определять пользователя? Вы обрекаете себя на кучу геморроя при отсутствии хоть какой-либо выгоды. Смысл?
так и хочется их разделить по таблицам, ибо в противном случае со временем будет очень много полей, которые нужны одной группе, но не нужны другой.
Для этого существуют связанные данные. Но сама таблица User будет одна. Примерная, упрощенная схема:
User: id | user_name | pass
User_dop_fields: id | fild_name | some_fild_settings
User_dop_fields_value: id | user_id | dop_fild_id | value
Dop_fields_by_role: id | role_name | dop_fild_id
ну и плюс 4 таблицы стандартные для rbac. Все У Вас пользователь имеет в зависимости от роли разный набор параметров + их можно динамически добавлять.