On the trails thing... have you considered using a geometry shader and just maintaining long points lists?
From your description, it sounds like each trail is requiring a lot of math steps to smooth out and deal with various issues, and it's (usually) cheaper to simply allow for a single segment per frame and simply cull frames faster for some trails (say, fast-movers where you might have hundreds of segments active if they take several seconds to fade out).
The cost issue there can really be mitigated by merely sending in sets of points, start width and segment decay values to a geometry shader. Then you're merely getting the new point, aging all the points and the shader handles creating the first / last segments and fades them out.
Then points lists can be de-coupled from engines per se; they can be started / killed whenever engines aren't in forward motion, and if they're per-frame, the results should be pretty smooth. Even if we're talking dozens of ships and missiles, the CPU load's small and the GPU-side stuff is very cheap, because it's not doing any big trig.
With one segment per frame, you generally won't have issues with severe angles between three points causing weirdness, too.
Really wish I had time to build an example of this for this engine right now, but RL is being a little extra-harsh timewise lately