Testing the upgrade path on a large site with 600k nodes and close to 300 fields, this function takes longer than the rest of the update functions combined. Some single alter table queries took over 100s and this is not a slow system (It did run the core tests in 14m 30s this week :p).
We can't do much about the execution time of the single queries but we should probably split it up and do a single table per call. It was actually able to run through with a max execution time of 30s as only a tiny fraction of the total time was spent in PHP but some servers might limit the total time. You're probably not running such a site on a server that does but still.