How are you doing this? Not knowing makes it hard to locate the problem.
The insert cursor itself should run pretty quickly, but if you are fetching the input for each row from all the various sources as each row is needed, I can see that being very slow.
Your reference to the source of the row items leads me to think you are doing something like that.
Gathering all the row data first, before inserting it into the feature class, would help.
Try building a list of the geometry object and attributes for each row, and nest the row lists in an enclosing list.
Then use that list to feed the cursor.
Perhaps a dictionary of rows keyed on a unique ID may be appropriate instead.
In any event, the idea is to feed the cursor as fast as it can spit the rows into the table.
Of course, you might be doing something like this already.... hard to tell.
Working on an in-memory feature class would likely help too.