The default behavior out of the box is what you described. We do so much more.
If you don’t like FIFO, then use the job_sort_formula, job_sort_key, or fairshare.
If you dislike how the scheduler moves on and runs Job B instead of waiting for Job A, look at strict_ordering. This will enforce the order (sorted or FIFO). If walltimes are provided and backfill_depth is not equal to 0, then the scheduler will backfill around the higher priority jobs. By default backfill_depth is 1, so maybe increase that to 10 or 50. Keep in mind that a higher backfill_depth will slow down the scheduler.
You can also use preemption to get your higher priority jobs running faster if you don’t mind delaying lower priority currently running jobs.
These are just a small number of options our scheduler provides to help craft your scheduling policy. If you want to see them all, read through the scheduling chapter in the big book as @adarsh suggested.