I'm not aware of a way that you can immediately release the lock for a session that is disconnected and rolling back.

Think of it like this, if you need a lock on a table for a transaction, is it fair to say that you need the lock until the transaction either is finished committing or finished rolling back?

If you tune the transaction to make it run faster, then when it releases the lock isn't as critical.

You should run the transaction with sql_trace and timed _statistics turned on and then run tkprof on the trace file to get an idea of what is happening in your transaction. You can also get good information from statspack.