**Approach 1**

Since Address in Compound field, you can simply fetch each Address attributes from Account object from the SOQL query and update invoice records like this:

    trigger udtInvAddress on Account (After Update) {
    List<Order2__c> invoices;
    if(Trigger.isAfter && Trigger.isUpdate){			
    	 invoices = [SELECT Id, Account__r.BillingStreet, Account__r.BillingCity, 
    	 Billing_City__c, Billing_State__c, Billing_Street__c, 
    	 Billing_zip__c, Billing_Country__c FROM Order2__c 
    	 WHERE Account_Name__c =:Trigger.newMap.keySet()];
    	for(Order2__c invoice: invoices)
    	{
    		System.debug(invoice.ID);
    		//update all of the fields with the updated information only if the new information is filled in.
    		if(invoice.Account__r.BillingStreet <> null){
    			invoice.Billing_Street__c = invoice.Account__r.BillingStreet;
    		}
    		//update other fields
    
    	}
    	update invoices;
    }

Moreover, your query needs to be bulkified and would be outside of for loop.

**Approach 2**

The use case can be simply be implemented by Process Builder. In this below picture I have shown you how Invoice Billing Street can be mapped with Account's Billing Street via Reference.

[![Update Invoice][1]][1]

The Account Address attributes can be picked up in the PB during field mapping like this:

[![Account Address fields][2]][2]

Since, without writing code, this functionality can be achieved, I will go by Process Builder.

  [1]: https://i.sstatic.net/ummwC.jpg
  [2]: https://i.sstatic.net/d9T8M.jpg