SAV>Насколько я помню оптимизатор шарпа выцепляет все одинаковые строки в коде и на каждую из них создает по одному экземпляру string. В случае с "" он возможно заменяет на string.Empty, но надо бы проверить
Тут даже не в компиляторе дело, а в рантайме (интернирование строк). Не важно, кто создается раньше — "" или string.Empty — в результате они будут указывать на одну и ту же строку, поскольку строки одинаковые.