This always bugs me too so I had a look at the generated gcode from V5:
;Generated with Cura_SteamEngine 5.0.0
M140 S50 ; set bed temperature 50
M105 ; Report temperatures
M190 S50 ; Wait for bed to heat up to 50
M104 S200 ; set extruder temperature 200
M105 ; Report temperatures
M109 S200 ; Wait for extruder to heat up to 200
It seems to consider bed and extruder temperatures as two unrelated settings and generates boiler plate code for each. Would a better method be to consider all initial heating requirements as a single unit and do something like this:
; Better option
M105 ; Report temperatures
M140 S50 ; set bed temperature 50
M104 S200 ; set extruder temperature 200
M109 S200 ; Wait for extruder to heat up to 200
M190 S50 ; Wait for bed to heat up to 50 -- will probably already be at temperature and therefore redundant but good to check
If there are more things to heat up on some machines like a second extruder or a cabinet then all the SETs are grouped at the beginning in any order and the WAITs are grouped at the end in order from hottest to coolest.