Камрад Иван, абсолютно прав.
Это задачка на 2 SQL таблицы:
1. Profiles
2. ProfileTags
и один SQL запрос, типа:
SELECT ProfileName FROM Profiles
WHERE ProfileID IN (SELECT ProfileTags.ProfileID FROM ProfileTags
WHERE ProfileTagName IN (SELECT * FROM STRING_SPLIT(CommaSeparatedTagNames,',')))
Если ранжировать (отсортировать по кол-ву совпадений в обратном порядке), то нужно использовать JOIN вместо подзапроса, подсчитывать кол-во совпавших тэгов и сортировать кол-во совпадений в обратном порядке.
Насчет БД, пример взят из похожей задачи на MSSQL - есть статьи с тэгами, нужно искать с статьи по выбранным пользователем тэгам.
Кстати, у SQL Server есть бесплатная Express Edition с ограничением 10гб на базу, 1гб на используемую память и 1 проц на 4 ядра макс.