Из вашего объяснения у меня будет просто абстрактный базовый класс, который может называться Пользователь, который определяет повторяющиеся свойства и методы, которые разделяют и Пациент, и Медик.
Я бы тогда выставил открытое свойство в этом базовом классе, который является объектом MembershipUser.
Затем просто сделайте классы Patient и Medic наследуемыми от базового класса User и реализуйте их уникальные функциональные возможности.
Базовый класс пользователя также может реализовывать открытое свойство, представляющее собой список T, в котором есть предложение where, ограничивающее T объектами User
Примерно так:
public abstract class User<T> where T : User<T>
{
public MembershipUser Membership { get; set; }
public List<T> Users { get; set; }
}
public class Patient : User<Medic>
{
}
public class Medic : User<Patient>
{
}