Вы бы сказали тогда какой длинны весь текст. Подвисает - он может долго думать, сжирать процессор. Если все таки память, то возможно он не выходит из цикла (кто знает, что у Вас там за текст) и строит список из миллионов результата.
И мне кажется у Вас там ошибка. Возможно lenghtText должен быть равен findText.Lenght. Т.е. после того как Вы нашли позицию вхождения, дальше надо искать с позиции
secondCharacter = (firstCharacter + findText.Lenght) - 1;
нет смысла сдвигать только на один символ. И не проще ли было найти все вхождения регуляркой? Это было бы две строки текста.