şimdi aynı döngü içinde komple metni verdiğin için, dize içinde sırayda değiştiriyor.şöyle garip bir yöntem var en basit haliyle,

procedure TForm1.Button1Click(Sender: TObject);
const
kelimeler : array[0..2] of string  = ('resim','ad','hekim');
esanlamlilar : array[0..2] of string = ('fotograf','isim','doktor');
var
  i,j : Integer;
  metin : string;
begin
  Memo2.Lines.Clear;
  for j := 0 to Memo1.Lines.Count - 1 do
  begin
    metin := Memo1.Lines[j];
    For i := 0 to Length(kelimeler) -1 do
    begin
       if AnsiPos(kelimeler[i],metin)>0 then
        metin := StringReplace(metin ,kelimeler[i],esanlamlilar[i],[rfReplaceAll, rfIgnoreCase])
       else
        metin := StringReplace(metin ,esanlamlilar[i],kelimeler[i],[rfReplaceAll, rfIgnoreCase])
    end;
    memo2.Lines.Add(metin);
  end;
end;
önce kelimeler dizesinde arıyor bulursa değiştiriyor bulamazsa esanlamlilar dizesinde arıyor.