It is possible to approximate a solution to this problem for most parametric trajectories. The idea is the following: if you zoom deep enough on a curve, you cannot tell the curve itself from its tangent at that point.
By making this assumption, there is no need to precompute anything more than two vectors (three for cubic Bezier curves, etc.).
So for a curve M(t) we compute its tangent vector dM/dt at point t. The norm of this vector is ||dM/dt|| and thus the distance traveled for a duration Δt can be approximated as ||dM/dt||Δt. It follows that a distance L is traveled for a duration L/||dM/dt||.
Application: quadratic Bezier curve
If the control points of the Bezier curve are A, B and C, the trajectory can be expressed as:
M(t) = (1-t)²A + 2t(1-t)B + t²C
= t²(A - 2B + C) + t(-2A + 2B) + A
So the derivative is:
dM/dt = t(2A - 4B + 2C) + (-2A + 2B)
You just need to store vectors v1 = 2A - 4B + 2C and v2 = -2A + 2B somewhere. Then, for a given t, if you want to advance of a length L, you do:
t = t + L / length(t * v1 + v2)
Cubic Bezier curves
The same reasoning applies to a curve with four control points A, B, C and D:
M(t) = (1-t)³A + 3t(1-t)²B + 3t²(1-t)C + t³D
= t³(-A + 3B - 3C + D) + t²(3A - 6B + 3C) + t(-3A + 3B) + A
The derivative is:
dM/dt = t²(-3A + 9B - 9C + 3D) + t(6A - 12B + 6C) + (-3A + 3B)
We precompute v1 = -3A + 9B - 9C + 3D, v2 = 6A - 12B + 6C and v3 = -3A + 3B and the final formula is:
t = t + L / length(t * t * v1 + t * v2 + v3);
Accuracy issues
If you are running at a reasonable framerate, L (which should be computed according to the frame duration) will be sufficiently small for the approximation to work.
However, you may experience inaccuracies in extreme cases. If L is too large, you can do the computation piecewise, for instance using 10 parts:
for (int i = 0; i < 10; i++)
t = t + (L / 10) / length(t * v1 + v2);