@Scholle
If your user-startup is being called by 'run' there is something badly wrong.
The speed aspect is obvious: When you have lots of programs in WBStartup AND a big user-startup, there's a good chance that they are executed in parallel which means lots of hard drive access back and forth
user-startup and wbstartup programs in parallel? Not on any system I have used.
A normal boot should be as follows
Commands in s:Startup-sequence are called sequentially (some are run, usually hacks/patches). Drivers are initialised, preferences are loaded etc.
If there is a user-startup, it is executed, again sequentially, causing the normal startup-sequence script to be suspended until it completes. It is not executed concurrently.
Workbench is then loaded, after any user-startup sequence has been processed.
Programs in WBStartup are launched in order of their start priority. Most use 'donotwait' which instructs workbench not to wait for the program to finish before continuing.
This is usually the busiest time, programs are being launched and workbench itself is being set up, images loaded etc. Your user-startup script should have long finished before this happens.
If you feel that you are getting too much strenuous activity at this point, add the 'delay' argument to loadwb, which causes workbench to wait for existing shell stuff to complete.