Сравнение массивов 5М+ значений?
Для этого есть всякие распределнные вычисления типа mapreduce на hadoop или аналогичных платформах.
Но 5млн строк это всё-таки не бигдата .
Делайте нормальный скрипт для проверки постепенной, а не 5 милионов сразу в функцию зах*уячить и ждать что всё будет прекрасно.
Можно еще очередь(amqp) поставить и воркеров запустить, и вкидывать туда задания. Но тоже это все аккуратно и постепенно.
Если сортируется быстро, то можно отсортировать массивы, затем пройтись по одному и найти все вхождения в другом, ограничивая перебор брейком, т.е. что-то в духе:sort($arr1);
sort($arr2);
$lv = 0;
$m = count($arr2);
foreach ($arr1 as $k1) {
    for ($i=$lv ;$i < $m; $i++) {
        if($k1 == $arr2[$i]) {
            // do smth
            $lv = i;
            break;
       }
       if ($k1 < $arr2[$i]) {
           break;
       }
   }
}
но это не готовое решение