Well, I don't see how this problem is very different from the classic Weighted Interval Scheduling. If "must be done" jobs do not overlap (and if they are then you have ill-defined problem - how to select between two overlapping "must be done" jobs?), then you simply need a way to make their relative weights stand out of the rest of jobs.
You can traverse your jobs in O(n), and find the maximum weight. Then for "must be done" jobs you need to add that maximum to their weights. That will ensure that they will be selected over any other jobs, since their relative weights will be definitely higher than the non-prioritized jobs.
As I said the only problem is when "must be done" jobs overlap. As in that case you will end with some must job not selected (since you will have to select one must job over the other).