Se le stringhe sono immutabili in .NET, allora perché la sottostringa richiede tempo O (n)?

Dato che le stringhe sono immutabili in .NET, mi chiedo perché siano state progettate in modo tale che string.Substring() O ( substring.Length ), invece di O(1) ?

cioè quali sono stati i compromessi, se del caso?