Have you eliminated all other bottlenecks and positively identified that it is only the IO opertation that is causing the issue - there are probably other areas of your code that you can save some time on - you can't really improve the perfromance of the actual IO operation.
e.g.
Within step 2, check whether you are recreating objects in your loop as this could be causing the issue rather than the IO.
Decide an actual time threshold that you want to warn about rather than a percentage of the last run - what happens if loop is 24% slowly than the previous one - this would compound up pretty quickly. I would suggest that you use the
StopWatch[
^] class for this - remember to reset the clock after each file though!
Once you have decided on you threashold time and a run through the loop exceeds this just log the filename as you are now.