So it looks to me like its the fetching of the data that is the issue here. The insert processing looks like its fine.
So when it comes to fetching, potential factors are:
a- how fast teradata can give you the data
b- the raw network speed
c- any network protocol overhead (ie, sqlnet etc)
d- the gateway mechanism (ie oracle-to-from-teradata)
e- the fetch size
We already know (e), because we're doing bulk collect. I'll leave you to work out whether (a) and (b) is an issue.
For (c), you might want to explore any benefits possible with SDU/TDU settings. Some info here
https://docs.oracle.com/cd/B28359_01/network.111/b28316/performance.htm https://oraganism.wordpress.com/2011/09/24/setting-sdu-size-mainly-in-11-2/ but in my experience, I've rarely seen *huge* gains by tinkering with them.
For (d) - what are you using ? the gateway ? or HS ? other ?
Hope this helps.