Можно использовать бинарное дерево с немного измененной функцией сравнения - сравнивать только первые n бит, где n размер префикса, если сравнивание идет с маской. Так можно за одну проверку понять, есть ли IP или маска, в которую он попадает, в списке. Для хостлистов тоже можно проделать подобное - нужно сравнивать хосты в обратном направлении, от конца к началу, чтобы находить либо сам поддомен, либо его домен верхнего уровня. В byedpi везде используются AVL-деревья и сравнения реализованы так.