Why Faces eat each other?
This is caused by how object is calculated in z-buffer. People call them Z-fighting. I won't go too deep for it.

Imagine that there is a painter going to oil paint your scene. We Know that oil paint can stack on it to cover the color behind it, right? So we can draw the farthest thing first and cover it with the closer object. That is basically how your view-port been rendered.

And for some math reason, the calculating for the near and far value - z-buffer, will become inaccurate in certain distances (depend on which algorithm). In Blender, the far distances.

Then, the inaccurate result from two object will some time become overlap with same value. Causing the painter confused on what should he paint first. And that is what you see in your view port. 

See this post as well: Cause of black artifacts in render?

And this one(point out by batFINGER): Faces become distorted, strange and look glitchy when looking through camera view