Попробуйте LINQ, чтобы найти индекс предмета по условию:
int index = dictionary.TakeWhile(condition).Count();
Если вы можете извлечь свое условие в Func, вы также можете использовать его в SkipWhile ():
Func<int, bool> condition = (key) => { return key == "textToSearch"; };
int index = dictionary.TakeWhile(item => condition(item.Key)).Count();
// use inverted condition
var secondPart = dictionary.SkipWhile(item => !condition(item.Key));
PS: если производительность имеет значение, это не будет лучшим решением