Если не нужен полнотекстовый поиск, тогда можно хранить и в MySQL.
Иначе - в полнотекстовых движках типа Sphinx Search, ElasticSearch. И стоит учесть, что для фильтрации критериев по числам они не подходят, насколько мне известно.
Вариант для MySQL 5.7+: хранить все >= 30 полей в одной колонке JSON. Добавить индексы на нужные поля. Без проблем с 2М и даже больше.
Одни будут каждый день удаляться по условию, другие добавляться в течении дня постоянно.
Использовать партицирование по критерию промежутка времени: по дням, месяцам, годам и т.д. Тогда будет проще регулярно удалять.