Motor6Ds are even faster than BulkMoveTo by a significant amount. I’m talking 0.001ms per CFrame update.
For every movable part, create a Motor6D. Set Part0 of the motor to workspace.Terrain and Part1 to the part you want to move. The reason we set Part0 to Terrain is so that the Transform property takes CFrames in world space (plus you also don’t need to create an invisible part at 0,0,0 this way; two birds one stone). Then, in your PreSimulation code, instead of updating the CFrames of the parts, you simply update the Transform property of their respective Motor6Ds.