Q:

Как найти все индексы вхождения подстроки в строку?

Как найти все индексы вхождения подстроки в строку, при этом не изменяя саму строку?

A:

Можно использовать перегрузку IndexOf(), принимающую начальный индекс:
string source = "some source string";
string substring = "so";

var indices = new List<int>();

int index = source.IndexOf(substring, 0);
while (index > -1)
{    
    indices.Add(index);
    index = source.IndexOf(substring, index + substring.Length);
}

