А если первое слово будет в тексте первым, а второе - последним? И текст размером 100 кб? Так и будешь весь текст показывать? Я делал так: заносил все вхождения в массив, затем брал желаемую длину описания, двигал это окно вдоль всего текста и определял, сколько ключевых слов попадет в описание. Находил максимум и вырезал это место. Правда, такой подход тоже имеет свои минусы: иногда в описание попадает 4 вхождения первого слова и ни одного вхождения других слов. Можно пробовать делать несколько описаний покороче и смотреть, чтобы в них попали разние слова.