Sounds like a great project for you to get to learn lsl scripting.
Here is an outline of how I would go about it.
Others may have more mathematical approaches, this is brute force and not re-locatable.
The item you rez will contain its own script to do the motion.
You will work on that first and worry about rezzing it and killing it later.
You will use llSetPos(position vector) to move it.
At first you include a line that says
llOwnerSay((string)llGetPos());
Move it physically to each "step" along the intended path and SAVE the script. Copy the position vector it gives you in CHAT to add to a list later.
If it needs to change the way it is pointing you will need a rotation vector for each step and add them to the list, or make two lists. with llOwnerSay((string)llGetRot());
Having plotted the path and stored them in a list (or two), remove (or comment out) the two reporting lines - you will only need them if you modify the path later.
Rez the object from some external stimulus to the first position and rotation vectors in your list.
When the object rezzes, use the OnRez function to make sure the default state is executed.
Start a timer that represents the time between position updates depending on how many positions you plotted and how long the motion has to last.
In a timer(){ event have a counter that increments. This will give you the index numbers to fetch the next llSetPos(< >

and llSetRot(< >

from the lists you made.
Each time this triggers you will move to the next step.
When this is all working you add one more line that says if(IndexCounter == one more than the number of steps) llDie(); This will cause it to disappear.
CAUTION!!!. When it disappears it is gone forever, it is not returned to inventory, it is not delivered to your trash bin. SO always work with a copy and dillegently save the script in a text file on your computer so you can replace it. And always keep a master copy of the object with NO SCRIPT IN IT so you can make a new one if you lose it.