I guess issue is inserting one row at a time. Can't you write the cursor into a set based select statement. if not, then try to commit every say 1000 or 10000 rows or 100K rows instead of every row. This should improver performance.
You might want to drop index before insert and rebuild it after that as well.