I solved the issue by creating a new main bone called "root". Here's what I did in Blender:
In Edit Mode, press Shift + A to create a new bone and name it "root".
Select the "Bip01" bone in the armature hierarchy.
Go to the Bone > Relations panel and set "root" as its parent.
Check the keyframes of the Bip01 bone, specifically on the Z Location axis.
If the motion goes forward and then backward, remove the keyframes that reverse the motion.
For those using Unreal Engine, like me:
I used the RMFixToolEditor plugin (available on the Marketplace). (Instead of change all keyframes from Bip01 to root manually)
Under Transfer Animation Between Bones, set:
From: Bip01
To: root
Enable Clear zero frame offset and select only on Y axis.
For each animation sequence, enable Root Motion, but disable Use Normalized Root Motion Scale.
Result: a clean and acceptable root motion.