:ApplyImpulse() isn't smooth

No. Use FastCast instead:

You will run into every single problem imaginable if you rely on Roblox physics for this.