Por que o .NET cria novas substrings em vez de apontar para strings existentes?

De um breve olhar usando o Reflector, pareceString.Substring() aloca memória para cada substring. Estou certo de que este é o caso? Eu pensei que isso não seria necessário, já que as cordas são imutáveis.

Meu objetivo subjacente era criar umIEnumerable<string> Split(this String, Char)&nbsp;método de extensão que não aloca memória adicional.