Hi Markus,
For infinite DMRG with just two sites you would probably be better off not to use the MPS class. The reason is that the main features it offers have to do with easily changing MPS gauge, but into a different style of gauge (a site-centered orthogonal gauge) rather than the canonical form you are using here.
I think your best approach here would be to just use four tensors G1, L1, G2, L2, say, and when you reach step (ii) just contract them together into a tensor T = L2 G1L1G2L2;
Another thing that could get tricky is that even if you use 4 distinct indices for the virtual indices in diagram (i), there could be steps where too many indices will match when doing the contraction (*) operation. You'll have to put primes on the indices you don't want to contract and carefully make sure each step is doing what you intend.
Something I do when prototyping a new code is to partially contract a few tensors together into a temporary, say "T" then do:
Print(T);
PAUSE
which prints T and pauses the program (PAUSE is a macro that gets included with the ITensor library). After the PAUSE, you can hit enter to continue one more iteration or Ctrl+C to exit.
Let me know if you have more questions.