Для оптимизации вначале вложи условия друг в друга. Первыми поставь у которых вероятность нахождения больше. Тогда при нахождении ты не будешь терять времени совсем.
И ещё, период поиска лучше задавать не в количестве проходов цикла (разные компы и циклы разной длины будут давать разный результат), а опираясь на системное время.
$time_2 = $_ms + 5000
WHILE($time_2 > $_ms)
GETSCREEN
IF_PICTURE_IN ($_xmax/2, 0, $_xmax, $_ymax, $Boi)
Print ("__$Boi")
$time_2 = 0
ELSE
IF_PICTURE_IN ($_xmax/2, 0, $_xmax, $_ymax, $Napali)
Print ("__$Napali")
$err_code = 1
$time_2 = 0
ELSE
IF_PICTURE_IN ($_xmax/2, 0, $_xmax, $_ymax, $Chasto)
Print ("__$Chasto")
$err_code = 2
$time_2 = 0
ELSE
IF_PICTURE_IN ($_xmax/2, 0, $_xmax, $_ymax, $Zanjat)
Print ("__$Zanjat")
$err_code = 3
$time_2 = 0
ELSE
IF_PICTURE_IN ($_xmax/2, 0, $_xmax, $_ymax, $travma)
Print ("__$travma")
$err_code = 4
$time_2 = 0
ELSE
IF_PICTURE_IN ($_xmax/2, 0, $_xmax, $_ymax, $Dostatochno)
Print ("__$Dostatochno")
$err_code = 5
$time_2 = 0
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_CYC
Print ("вышли из цикла")
Кстати, после выхода мы по переменной $time_2 можем понять нашли что нибудь или закончили по времени. Если $time_2 = 0 - то нашли