Desempenho String.comparison (com trim)

Eu preciso fazer um monte de comparações de seqüência de caracteres de alta performance sem distinção entre maiúsculas e minúsculas e percebi que minha maneira de fazê-lo .ToLower (). Trim () era realmente estúpido devido a todas as novas seqüências de caracteres sendo alocadas

Então eu cavrei um pouco e assim parece preferível:

String.Compare(txt1,txt2, StringComparison.OrdinalIgnoreCase)

O único problema aqui é que eu quero ignorar os espaços iniciais ou finais, isto é, Trim (), mas se eu usar o Trim, tenho o mesmo problema com as alocações de strings. Eu acho que eu poderia verificar cada seqüência e ver se ele começa com ("") ou EndsWith ("") e somente depois de aparar. Ou isso ou descobrir o índice, o comprimento de cada string e passar para string.Compare substituir

public static int Compare
(
    string strA,
    int indexA,
    string strB,
    int indexB,
    int length,
    StringComparison comparisonType
) 

mas isso parece um pouco bagunçado e eu provavelmente tenho que usar alguns números inteiros se eu não fizer uma declaração if-else realmente grande para cada combinação de espaços em branco iniciais e à esquerda em ambas as strings ... então alguma idéia de uma solução elegante?

Aqui está minha proposta atual:

public bool IsEqual(string a, string b)
    {
        return (string.Compare(a, b, StringComparison.OrdinalIgnoreCase) == 0);
    }

    public bool IsTrimEqual(string a, string b)
    {
        if (Math.Abs(a.Length- b.Length) > 2 ) // if length differs by more than 2, cant be equal
        {
            return  false;
        }
        else if (IsEqual(a,b))
        {
            return true;
        }
        else 
        {
            return (string.Compare(a.Trim(), b.Trim(), StringComparison.OrdinalIgnoreCase) == 0);
        }
    }