Кстати разница между
Index = Str.IndexOf(FindString, Index);
и
Index = Str.IndexOf(FindString, Index, StringComparison.Ordinal);
действительна существенна на частной задаче как 14.20 минут против 8.20, и судя по статье там уже есть полная оптимизация