The only way that I know to move a part is by for looping its position or cframe
for i = 0, 10, 0.5 do wait(0.1) part.Position = part.Position + Vector3.new(0, 0, i) end
is there another efficent way?
Instead of looping the position or its CFrame, you should consider using BodyPosition. You can set a specific position for the BodyPosition to go to, and it will go there smoothly. Read more about BodyPositions here.