Create a Calculation field, which i'll call Address_Label in the post, and use the CASE Function.
not IsEmpty ( POBoxField ) ; POBoxField ;
not IsEmpty ( MailAddressField ) ; MailAddressField ;
If i understand correctly the Hierarchy of the address system, This will use the POBox field firstly if it contains data, if not it will look at the Mail Address field and use it if it contains data, if neither have data it will use the Residential address.
So just make sure you use the new calculated address field on your label layout.