Genérico com várias classes

Estou tentando criar esse método genérico para simplificar as coisas, mas acho que estraguei tudo! Você pode ajudar com o meu problema?

Isso compila:

private string ConcatenateText<T1, T2>(MyEntity myEntity) 
    where T1 : Supplier, new()
    where T1 : Employee, new()
    where T2 : SupplierDepartment, new()
    where T2 : EmployeeDepartment, new()
{
    T1 p = new T1();
    T2 r = new T2();
    //Code here for myEntity treatment
    return mystring;
}

Enquanto isso não compila:

protected void mybutton1_Click(object sender, EventArgs e)
{
   string mystring = ConcatenaText<Supplier, SupplierDepartment>(myEntity);
}

//This does not compile
protected void mybutton2_Click(object sender, EventArgs e)
{
   string mystring = ConcatenaText<Employee, EmployeeDepartment>(myEntity);
}

Mensagem: O tipo Fornecedor não pode ser usado como tipo de parâmetro T1 no tipo genérico ou método ConcatenateText (MyEntity myEntity). Não há conversão de referência implícita do fornecedor para o funcionário

Isso pode ser feito? O que estou fazendo de errado? Pode ser melhorado?

EDITAR:

E MyEntity é apenas mais uma classe para processá-lo dentro deste método genérico! Não está relacionado com os tipos T. É apenas um argumento. Mas é claro que não posso fazer isso usando 2 tipos como esse. Eu pensei que eu poderia atribuir um ou outro e o CLR independentemente da minha inicialização poderia reagir como eu queria. Eu vou aceitar a resposta que compartilha um pouco mais de informação sobre isso.

questionAnswers(3)

yourAnswerToTheQuestion