Problems with a dash system that uses BodyPosition

Hello. I have a dash system that uses BodyPosition with the following values:

local dashLength = .5 --BodyPosition will get deleted in .5 secs
vel.MaxForce = Vector3.new(12500, 0, 12500)
vel.D = 20
vel.P = 80
vel.Position = hrp.CFrame * CFrame.new(0,0,22).Position --CFrame.new(0,0,22) changes depending on the dash direction, which is detected from W,A,S,D inputs.

Dash - This is how it looks like.

Now the thing is that I want to have a dash speed progression in my game. I want high level players to dash faster, as in reaching the SAME dash destination faster than lower level players, not dashing FURTHER. However every time I try to make it faster than it currently is, the dash movement either gets wobbly or the player gets flung when they touch an object mid-dash. The values I gave are the highest speed I can achieve without creating problems but that is simply not enough. Changing MaxForce to 25000 feels slightly faster (not really sure if it actually is), but there is no speed difference between 25000 and 99999999.

Another issue is that below certain values like 8000 MaxForce, the dash is too slow when done straight to the left, right, back or front. However for some reason it gets fast when you do it diagonally. Video
Why is it like that?

So yeah, what can I do? Is there anyone who can give more information on P, D and MaxForce than what is already written on documentation? They feel so random to me. Or what do you recommend if you think I should give up on BodyPosition since it is deprecated and all that?

Maybe the problem is that you are using a deprecated instance and you should change the BodyPosition to AlignPosition.