If you want to make them follow a path you define your self I would check out the spline component. You could define the path with a spline and use the normal navigation system to make them move between points on the spline.
To do this you would need an actor blueprint with a spline component. Then make some sort of function that returns the next point on the spline. You could control how smoothly they follow the spline by sampling it at different intervals. Eg every 10cm for a smooth sample or very 100cm for not so smooth but better performing.
The function you’ll need from the spline component to make this work is GetWorldLocactionAtDistanceOnSpline. Your function to get the next point just needs to return the result of this with something like PointNumber * SampleLength as the input.