That's trivially implementable with fat pointers, because one turns into
(*(p+(5)))
while the other turns into
(*((5)+p))
and addition is commutative: the type of the entire expression is typeof(p) in both cases by the C type conversion rules, so the 5 is multiplied by sizeof(*p) in both cases.
So this is perfectly expressible without requiring either flat memory or any form of out-of-object or untyped addressing.