There is nothing wrong with using UNION. It would probably perform faster than using the OR logical boolean operator because it most likely will have less table reads. If you want, you can try and take the top half of the query and substitute the WHERE clause with the code below. I believe it will work, but hard to tell without any data.
where (tm.SubmissionStatus = 0 OR pm.PositionId not in (select PositionId from TimesheetMasters))