I wrote a long reply, and then my browser crashed ... and I want to get back to the code so I'll go with a shorter version.
The device in question is a small, not more than 2 meters long, almost opulent looking object which you would see in a fairly luxurious steampunk setting. So it's a static engine and I don't have to worry about the issues that would be noticeable with something large like a locomotive (eg the surges at startup, etc).
The motion of the piston shaft is, at this stage, a little less than 0.5 meters and represents the only linear motion on the entire linkset. I would have loved to include a camshaft and connecting rod (having seen some amazing engines in-world) I decided that the script load represented by that was just too much. And, to be honest, the mental toll of trying to synchronise the motions of piston, conrod, and camshaft would definitely be beyond me.
We definitely have a consensus :) I'll look at the use of llSetLinkPrimitiveParamsFast().
I may have to fall back on a texture animation, although I don't want to as the piston shaft I've made is specifically designed to have 'physical' features to make the motion more apparent, and I'd have to remove them and it would detract from the build.
Thanks everyone for your very helpful advice. :D