you say that dropping and re-creating indexes can create problems. Another way to do it is the mark the indexes unusable and then rebuild them. This way their definition (name, columns, tablespace etc) is never "lost", even if some step fails.
So, in step 2 loop over all the indexes of the table and run:
ALTER INDEX my_index_name UNUSABLE;
and in step 4 loop over the indexes and rebuild. You can specify nologging, the desired parallel level, index compression etc:
ALTER INDEX my_index_name REBUILD NOLOGGING PARALLEL 16;
It is more efficient to build indexes in one clean sweep then "row by row". In the first case Oracle does one full table scan, sorts and writes the index. If the index is maintained during the bulk load, it gets updated all the time during the load, so it needs to constantly update its leaf block all over the place, doing more work and I/O. Why? because each index block will get updated several times during different points in time of the load.
BTW - hopefully, you have a "step 5" - collect statistics on table and indexes (in parallel)