何百回と繰り返すわけではないので、違いは極々わずかなので無視できるんですが。
http://d.hatena.ne.jp/ysano2005/20050728/1122480192 を見てふと思った。
正規表現2回ってなんとなくいやだなぁと。で、

if (preg_match("/^dispatch_/", $key)) {
	$action = preg_replace("/^dispatch_/", "", $key);
	$this->setParameter(ACTION_KEY, $action);
	break;
}

をこうしたらどうなんだろう?

$action = preg_replace("/^dispatch_/", "", $key);
if ($key != $action) {
	$this->setParameter(ACTION_KEY, $action);
	break;
}

で、こんなものを作ってみる。

$key = "actionname";
$max = 500;

$st = gettime();
for ($j=0; $j<$max; ++$j) {
	if (preg_match("/^dispatch_/", $key)) {
		$action = preg_replace("/^dispatch_/", "", $key);
	}
}
$ed = gettime();
print ($ed - $st) . "sec.\n";

$i=0;
$st = gettime();
for ($j=0; $j<$max; ++$j) {
	$action = preg_replace("/^dispatch_/", "", $key);
	if ($key != $action) {
	}
}
$ed = gettime();
print ($ed - $st) . "sec.\n";

function gettime()
{
	list($m, $s) = explode(' ', microtime());
	return (float)$m + (float)$s;
}

結果、$keyに「dispatch_」が入っていない場合は、前者が早く、
「dispatch_」が入っていた場合は、後者の方が若干早い。
つまり速度は、preg_replace < preg_match なのね。で、「dispatch_」が入ってた場合は
preg_match + preg_replace < preg_replace なので。

ま、ヒットする確立が多いと思われる場合は、後者の方がいいのかなぁというとこですかね。きっとid:kunitさんは意識してやってるんだろうなぁ。深いねぇ〜。