Трудно вносить предложения, не зная немного больше о бизнесе, но кажется, что у вас слишком много избыточной информации.
Разделение пользователя - это хорошо, так как любой из этих типов людей может быть пользователем. Я бы, вероятно, поместил бы общую информацию, имя, адрес электронной почты в поле пользователя, возможно, даже адрес и должность.
Тогда, похоже, вы хотите, чтобы пользователь мог иметь одну или несколько ролей, где роль контролирует их уровень доступа. Это может быть так же просто, как начать со столбцов role_id в таблице БД, или это может быть отдельная таблица user_id, role_id.
Теперь, несмотря на все сказанное, трудно вносить предложения без дополнительной информации. Вам нужно изолировать пользователей по компании? Будет ли много компаний? Сколько владельцев бизнеса вы хотите иметь?