A '97 LHS has a 3.5 liter engine. There is no TAC Valve that I know of. It has an AIS (Automatic Idle Speed) motor mounted in the rear of the intake plenum. However, I don't think this has anything to do with your problem. I would lean more towards a jumped timing belt, which is very common on this engine. Usually, the water pump leaks, coolant collects in the teeth of the timing belt, and causes the belt to skip a couple of teeth. Does the "Cruise Control" light flicker on and off when the problem occurs? This is a pretty good indicator that the timing has jumped. It can also set a fault code "Loss of Cam or Crank Signal". Another common problem with this engine is the lower intake gaskets breaking apart, causing a vacuum leak. But this usually causes a skip at idle that goes away as the RPMs' are increased. I have also seen EGR Valves stick open, but this usually causes a rough idle/stall condition. Without some Scan Tool information, I'm simply guessing at your problem, but these are the most common issues with this engine. If you can post some more info, perhaps I can give a better diagnosis.
If you still have a code 21, try swapping the O2 sensors from side to side, and see if the code follows the sensor (defective sensor) or stays at the original problem area (wiring, or PCM). Also, have you done a fuel pressure test? IIRC, should have 48 psi. How about a compression test? It now sounds like a fuel related issue, but a jumped timing belt could possibly still cause these symptoms. HTH!! Good Luck!
ASE Master Technician
28 Years with Chrysler