I would write a simple XML timer gauge that times your animation from 1 to 100 on a number lvar then have your visibility trigered by one end of the range ie.
in the gauge...
(L:blo, bool) if{ (L:blaa, number) 1 + (>L:blaa, number) }
then to limit
(L:blaa, number) 101 == if{ (L:blaa, number) 100 (>L:blaa, number) }
then to reset
(L:blo, bool) 0 == if{ (L:blaa, number) 1 - (>L:blaa, number) }
and
(L:blaa, number) -1 == if{ (L:blaa, number) 0 (>L:blaa, number) }
Then in the modeldef.....
animate your cowls with the (L:blaa, number) keyframes 0-100 and no lag
0 closed 100 open
Then tag the visibility with (L:blaa, number) 1 >= that way the engine will apear as soon as the variable hits 1.
You can change the speed by changing the amount to + or minus the number variable. as long as the variable will hit the end numbers exactly...
I use this sort of animation all the time for example to control 'remove before flight' signs that i only want to flap @ certain windspeeds. I know its not the neatest solution but compile it as an spb and the performance hit from having this sort of animation going will be minimal.