Hi i'm trying to project a image onto a plane, i lined up the UV's with the correct perspective but my image distorts on the plane, subdividing the mesh a few times solves the issue but i would like to know if there's a better fix?
That error is common, if there are not enough subdivisions.
You need more subdivisions on the mesh.
In edit mode, subdivide the plane, or add a subsurf modifier and set it to simple mode (instead of Catmull-Clark).
If you look carefully, the texture is divided in two triangles, which is how 3d Engines work, by triangulating the geometry. Without any form of interpolation, the engine cannot deform a rectangular texture into a trapezoidal one. By interpolating you are still getting the triangles, but since the distortion is made in many places it will not be as noticeable.
The best solution, though, would be to use a shape that is not trapezodial at all, but rectangular like in the real world and is deformed by the perspective from the camera and the lens used.
Use Fspy, that way you can reconstruct the geometry, so that it resembles the real world.
Read all about it in the following post:
(For a longer explanation on why this happens maybe someone more versed in OpenGL and the algorithms used for texture mapping can edit or delete, or write a new answer, in the meantime do a google search for "affine" texture coordinates)
I'll leave this image here to picque your curiosity: