Лично я бы сохранил все эти разные классы пользователей в одной таблице. Затем у вас может быть поле, в котором хранится значение «Тип», или вы можете указать, с каким типом человека вы имеете дело, по каким полям заполнены. Например, если UserID равен NULL, то эта запись не Пользователь.
Вы можете ссылаться на другие таблицы, используя тип соединения один-к-одному или ни к одному, но затем в каждом запросе вы будете добавлять дополнительные объединения.
Первый метод также поддерживается LINQ-to-SQL, если вы решите пойти по этому маршруту (они называют его «Таблица на иерархию» или «TPH»).