Я предполагаю, что у вас есть веская причина перебирать список 500 000 раз.
В зависимости от работы, которую вы выполняете на каждой итерации, вы можете получить выгоду от некоторой парализации рабочей нагрузки. Взгляните на TPL , вы можете использовать Parallel.ForEach , чтобы разбить работу на задачи, которые могут выполняться одновременно. Таким образом, вы можете воспользоваться преимуществами более мощного оборудования с большим количеством ядер ЦП.
Конечно, если вы можете выполнять большую часть работы за меньшее количество итераций, вы также можете получить некоторую производительность, однако, фактически не зная, что вы делаете, единственный совет, который можно предложить, - это идеи высокого уровня без каких-либо оснований для фактической проблемной области.