A quanto ho capito, di l'oggetto String molto probabilmente è usato in diversi namespace ed a scopi differenti, altrimenti non si giustifica l'uso di appartenenza a System.
Il namespace di per se evita ambiguità. Nessuno ti vieta di creare una tua implementazione di String e usare un namespace diverso, una persona terza magari fornisce la sua implementazione e la mette in un namespace diverso. Per farla breve puoi pensare al namespace come una "specie" di cognome che evita omonimie (e se non basta se ne aggiunge un altro e così via).