New interpolation works way better on lower send rates than the current one.
It does not use Interpolate Movement Factor or Interpolate Rotation Factor, because they were not necessary. I only made on for 3D because that is what I am using, making equivalent code for 2D should be relatively trivial. (If it is not, tell me and I will try my hand at it)
This interpolation uses a quadratic bezier curve to try to keep the velocity continuous.
Further experimentation shows that with packet loss cranked up this interpolation deteriorates, compared to default unity interpolation. This is most likely due to the fact that it relies on packets being evenly spaced out as time passes, and missing packets cause an empty gap in the movement, causing choppiness. Extrapolation could fix this (using LerpUnclamped) but the major problem with this is that position and rotation packets stop being sent when the rigidbody stops moving, ideally 1 more packet should be sent when it stops moving so that the history is cleared out and it does not extrapolate to infinity, or until it moves again. Maybe a combination of this and unity's default interpolation could fix the packet loss problem.