Proper way to deal with float precision?

Yeah the solution is to just move it further. Changing units wouldn’t really matter, you’d just be dealing with even smaller numbers. Look at UMovementComponent::ResolvePenetration() and UMovementComponent::GetPenetrationAdjustment(), which do something like this, using global epsilon values.

Moving world origin is an expensive operation, especially once the number of actors in the level starts increasing.