I mean the green line which goes from the top right corner to the bottom left):
Why does this happen
This quad was split into two triangles and it looks like one triangle (assumed first) was top-left/top-right/bottom-left and the other (assumed last) was top-right/bottom-right, bottom-left.
If you consider that each triangle is drawn separately - and without any knowledge of the other - then the first triangle has no idea that it is supposed to be including the colour from the vertex in the last triangle that isn't in the first i.e. the bottom-right: blue.
It will generally look smooth if all of the colours are close to each other but the problem is most apparent when two opposite corners are similar but very different to the other two opposites, as in the second image.
As for
how to avoid it...
Using shaders is (I think) the only real way to fix it but you say that not an option,
using a tiny texture fixes it but is probably best suited for static colours,
using similar (or specially selected) colours helps to reduce the noticability of the effect,
splitting the quad into a grid (as Laurent suggested) also reduces the noticability. This would involve creating more, smaller squares, and interpolating each corner yourself.