Placing the commit inside the loop will not make your code faster. Please read the link I provided at the end of the answer.
I would still say 25,000 is high. You would need to test in your environment to find the point where increasing this adds no performance benefit/slows it down. This really is the last mile of tuning though. Optimize the SQL statements first.
Converting the loop to a single SQL statement is likely to be faster (though it's not guaranteed).
I guess if we cocnvert it to single sql statement then it will be slower as it has to fetcch all the records and then insert into the new table.
This is what the code (cursor, bulk collect, forall) is doing anyway. But it has more SQL statements = more parsing, more SQL<>PL/SQL contexts switches, etc.