Things like CIELAB are also interesting in that they provide more perceptually uniform color spaces, but at a greater computational cost.
There are other tricks you can use like stroking/bordering the text with the opposite color as it provides contrast when white is on a light background or black is on a dark background. You can also have the text "glow" or some use a drop shadow. But these don't work that great when your text is small. However you have to use these tricks when you are putting text on top of a gradient.
There I solved it once I realized what was going on by converting the start and end colors to linear sRGB values and then interpolate between these two.
Would this work here too ?
One has to switch to HSV for proper tweening.