Не думаю что поставить кэширующий локальный DNS так сложно.
Ставить много разных DNS для резолвинга просто дурацкая идея...
В первую очередь для такой "многопоточной" загрузки страниц нужна ассинхронная обработка.
Идея в том что бы не вызывать 1 000 000 потоков на 1 000 000 доменов, всего лишь 8-16.
Я бы просто взял netty и не заморачивался бы...
Можно попробывать на С++ epoll() libcurl и pthread'ах завести, но можно и на Python Twisted.
В общем хватает барахла, главное это использование epoll() kqueue() ядерных поллеров, язык и библиотеки не имеют большего значения...