Duplicate Spaceships on Faces and use a Curve Modifier
Duplicated Spaceships follow the Curve by Location and Tangent/Velocity Vector by Rotation. No unwanted distortion.
The GIF above is OpenGL Render Active Viewport ... Not Final Render.
Thus you see one SpaceShip Not Following Curve ... Lets call that the Original Design Time Object ODTO. In Final Render the ODTO will not be visible.. so all duplicated Space Ships will follow curve. I am emphasizing a difference between design time visbililty and final render time visibility.
In the image above a mesh named [DuplicateChildren] is composed of squares in straight line is highlighted. Note in the Duplication Tab [Faces] is selected. This instructs Blender to make duplicates of Child Objects as seen in the tooltip. One mesh object creates many space ships for final render efficiently in terms of memory. Its child object is SpaceShip as indicated in the Outliner Window. For every face in the Parent mesh a SpaceShip is rendered.
The DuplicateChildren mesh has a Curve Modifier. As indicated when the Blender User animates the DuplicateChildren mesh in the X direction it duplicated children SpaceShip follows the curve as well.
Example of Final Render image where all SpaceShip shapes follow curve.
I am attempting to cover Keypoints only here. You can experiment and learn and improve what is shown here.
More to Follow
I believe using a Curve as a tool will give you easier and more precise results as part of your final solution. You can have many of the above arrangements. For the high population you stated you want, may need to compose many techniques.
I believe I have other answers using Duplifaces or Duplication on Faces as well.
See other answers at BSE on Duplication.
See the Blender Manual as well if you dare for more mastery.