Multiple DLookups is the culprit. A function with a DAO lookup would be considerably faster. Dlookups are kknown to be glacially slow. Also, you can probably achieve the same result with a "left join" in your query looking up the desired value.
From what you've posted, I can't tell you more...