If a car with a DIC is misfiring at speed but not at idle, even after new plugs and a new DI, the problem can be as simple as a partially clogged fuel injector. At idle enough fuel gets through. At higher revolutions there is not enough fuel, or the spray pattern is so far off that the cylinder will not fire. I would run some injector cleaner, strongest suff you can find, before doing anything else.
The CEL code probably has nothing to do with the CPS.
As far as I know, there is no code for CPS (CRANK-shaft Position Sensor) failures, the car will simply stall or not start. On a turbo with a T5 ecu, it does not do much. See furter below for part number and price if you feel you need one.
If you do have a CEL code, please post it, that can help with some advice.
Assuming the code was P0340, this is a generic code. So, if your mechanic is an indy and looked it up in a manual, he would find something like this:
Camshaft Position Sensor A Circuit (Bank 1 or single sensor)
from
http://www.iequus.com/obd_def.asp
Note the use of the word "Camshaft", NOT "Crankshaft".
There is no camshaft sensor on a turbo, this function is performed by the T5 ecu, which senses the firing order of the cylinders on startup by feedback from the sparkplugs, via the infamous DI cassette (that is part of the reason why we have resistor plugs).
What happens inside the cylinder depends on a lot of things. Spark plug, DI cassette, injectors working correctly. So, if the mechanic went by the code and your symptoms, he would have tried plugs and a new DIC first.
As for the crankshaft position sensor:
pasting from eEuroparts.com:>>>
Part Code: 9177221
Part Name: Crankshaft position sensor
Part Brand: Genuine Saab
Part Cost: $39.60
Part Description: Crankshaft position sensor for any 96-98 900 2.3L, 99-03 9-5 4cyl, 99-02 Viggen, 00-02 9-3 all.
<<<
Reference: Haynes, Chapter 4A, section 14.7 (Motronic ecu) and 15.20 (T5)