Это именно то, с чем поставщики баз данных сталкивались годами. Если вы собираетесь последовательно искать по src / dst IP / порту, вы можете использовать это в качестве критерия для сортировки и искать его более или менее напрямую.
В противном случае типичный подход заключается в сортировке данных по одному полю и построении индексов для других полей. Затем можно выполнить бинарный поиск по каждому индексу, чтобы найти набор записей, который соответствует критериям для этого поля. Пересечение этих наборов будет теми записями, которые вы ищете.
Конечно, если вы предпочитаете, вы также можете уменьшить количество индексов, поэтому (например) вы можете использовать индексы, чтобы получить набор записей с правильными исходными и целевыми IP-адресами, а затем просто просмотреть их (возможно, довольно маленький), чтобы получить те с правильным номером порта.