The avoid-collision behavior should really be a function on BasePart that must be called explicitly if needed. This would even make it extendable, such as being able to specify which direction you want the part to move to get out of the way, and returning how much it was displaced (or whatever bit of information might be useful or doesn’t cost extra to calculate). Then it can also be used implicitly in things where the behavior is essential, such as SpawnLocations.
float BasePart:MoveThePartInADirectionUntilThePartIsNotCollidingWithAnything(Vector3 direction)