SELECT a.AccountName, a.AccountNumber
FROM tblAccounts a
LEFT OUTER JOIN tblServiceOrders s on s.AccountNumber = a.AccountNumber
LEFT OUTER JOIN tblInvoices i on i.AccountNumber = a.AccountNumber
WHERE (s.AccountNumber IS NOT NULL AND s.ServiceOrderDate >= CAST(DATEADD(YEAR,-3,GETDATE()) AS DATE))
OR (i.AccountNumber IS NOT NULL AND i.InvoiceDate >= CAST(DATEADD(YEAR,-3,GETDATE()) AS DATE))
SELECT a.AccountName, a.AccountNumber
FROM tblAccounts a
LEFT OUTER JOIN tblServiceOrders s on s.AccountNumber = a.AccountNumber
LEFT OUTER JOIN tblInvoices i on i.AccountNumber = a.AccountNumber
WHERE (s.AccountNumber IS NULL OR s.ServiceOrderDate < CAST(DATEADD(YEAR,-3,GETDATE()) AS DATE))
AND (i.AccountNumber IS NULL OR i.InvoiceDate < CAST(DATEADD(YEAR,-3,GETDATE()) AS DATE))
Please note various join types - inner, left, right, full, ...
To decide if something is IN certain set of values look at the IN operator (https://www.w3schools.com/sql/sql_in.asp).