The way I always got around this, was to use an alias with parameters for the current position. Then call that alias with a timer at the end of itself if it needed to process more. Yeah, it will take a bit longer to do, but it doesn't stop mIRC from processing events.
Quick and dirty example, started with /test 1...
alias test {
echo -es Count $1
if ($1 < 10) { .timer 1 0 test $calc($1 + 1) }
}