Что касается приоритетов слов, простое, но довольно эффективное решение состоит в том, чтобы отсортировать их по популярности (возможно, индекс популярности можно создать на основе статей в вашей базе данных), чтобы слова, встречающиеся в ваших текстах, были более важными, таким образомВы можете усилить слова, которые являются менее общими.
Другая проблема заключается в том факте, что у вас могут быть слова в разных формах, таких как прошедшее / будущее время, поэтому вас может заинтересовать stemming Насколько я помню, одним из инструментов, который был перенесен на c #, является проект Snowball.
Что касается выполнения второй части вашей проблемы, то цикл по словам может быть очень неэффективным, я думаю, вы должны рассмотреть возможность использования некоторых библиотек индексирования./ решения.Одним из популярных для .net является Lucene.Net .Он в основном создает обратный индекс, который отображает определенные фразы (например, слова) в статьи, которые их содержат, что позволяет вам быстро находить все вхождения данных слов в ваших текстах.Подобный подход может быть реализован вами внутри вашей базы данных