I do not know about having the expression run in a different tool but you can split the WfUserWorkQueue into a pool of queues to make it "multithreaded". This way if you do get a hung job, other jobs will continue.
Look up using these properties (to be set in wt.properties): wt.workflow.engine.userWorkPoolSize wt.workflow.engine.propagationPoolSize
And don't forget you might need to adjust this property: wt.queue.maxprocessQueues.
We are splitting the WfUserWorkQueues into their own BackgroundMethodServer as well, but for other reasons. The built-in Windchill Help is pretty good at describing how to do this.
Are you using OOTB CN summary report or custom one. Are they reports (both for simple or complex ECN) coming out good when you run from UI.
I see this is a performance issue with WC & Cognos than thinking around Queue. Have you checked Apache access logs. You might be seeing too many query requests.
Some of logs can be turned for Windchill side cognos debugging.
windchill wt.util.jmx.SetlogLevel -all com.ptc.windchill.enterprise.report ALL windchill wt.util.jmx.SetlogLevel -all com.ptc.windchill.cognosxmlservlet ALL windchill wt.util.jmx.SetlogLevel -all wt.method.server.timing ALL windchill wt.util.jmx.SetlogLevel -all wt.pom.traceTiming ALL
Apache Update access.log output format to show query and time of request in seconds: CustomLog logs/access.log "%h %u %t %V \"%r\" %q %>s %D %T %b"
If expression robo fails for every report with time-out error, I would recommend to stop using that for time being and fix performance issue.