Denemedim ama çalışır sanırım:
<?php

$text = 'ali, ayşeyi çok severdi. Ama ayşe, aliyi sevmezdi. Çünkü ali çok pisdi.';
$replaces = array(
	0 => 'veli',
	1 => 'ahmet',
	2 => 'kemal',
);

preg_match_all('~(ali)~i', $text, $matches);
$matches_count = count($matches[1]);

for ($i = 0; $i < $matches_count; $i++)
	$text = str_ireplace($matches[1][$i], $replaces[$i], $text);

echo $text;
?>