Texture interpolation only works if a single pixel of the texture is spread across multiple pixels of the display. If the texture is far enough away that display pixels are larger than texture pixels, some texture pixels will not be displayed at all, leading to a jagged, messy appearance.
This is where mipmapping comes in: instead of a single version of a texture, you have multiple versions, each smaller than the previous, created by downscaling the texture and blending adjacent pixels together. This is called a mipmap, and the different versions are traditionally each half the size of the last. When displaying the texture, the renderer will select the largest version that spreads texture pixels across multiple display pixels, and interpolates on that.
But this in turn has a problem: the transition between texture versions produces an abrupt line in the display. The solution to this is trilinear filtering: instead of simply interpolating between pixels in a texture, the renderer also interpolates between versions of the texture.