There are two distinct G-code command for heat and heat-and-wait. You can set the target temperatures for the hotend and bed with the no-waiting variety and after this send the commands that wait.
I have in cura the following command in the start G-code
;*** Start Preheating ***
M140 S{material_bed_temperature_layer_0} ; start preheating the bed
M104 S{material_print_temperature_layer_0} T0 ; start preheating hotend
;G28 ; home
M190 S{material_bed_temperature_layer_0} ; heat to Cura Bed setting
M109 S{material_print_temperature_layer_0} T0 ; heat to Cura Hotend setting
;*** End Preheating ***
With this the heating of hotend and bed runs at the same time. Way faster than one after the other.
jandar, I've never seen the hotend heat faster than the bed, so M140, M104, M190 should be enough. (I have that set in Cura, and never had a print that tried to start before the hotend had been up to temperature for a while.)
I've never seen the hotend heat faster than the bed
I had it today. With only a few minutes between prints the hotend was cooled down and the bed not so much. As the bed arrived at the target temp the hotend was missing 30 degree Celsius. Omitting M109 doesn't give any advantage but makes problems more probably, so why do it?