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...
Code:
alias test {
  echo -es Count $1
  if ($1 < 10) { .timer 1 0 test $calc($1 + 1) }
}