You have three options.
The first is to select all required columns into the @table variable - do you really need select *? You can then return the data directly from @IDsFromCustomer1.
You would need to experiment with the effectiveness depending on the table width and logical reads in each case. Using set statistics io on will show you the logical reads, you can also see this in the properties of the execution plan in SSMS.
Your second option which may help would be to not use a table variable but declare an actual #temp table.
You could then return your data by selecting from #IDsFromCustomer1 and joining back to your Customer table.
Using a temp table would have the benefit of SQL Server having statistics on the data and an optimal execution plan, plus you may benefit from a clustered index on the temp table also.
Testing to see which yields lower logical reads will (in most cases) highlight the best implementation.
A third option might work for you as mentioned by Dale in the comments, depending on your usage in when you want to have the temp table data available and when you want to output your results.
Using merge you can insert your data and also output data at the same time.
for example you could do the following
merge @IDsFromCustomer1 as t using ( select * from Customer where CustomerID = @CustomerID ) as s on 1=1 when not matched then insert (CustomerID, TerritoryID) values (s.CustomerID, s.TerritoryID) output s.*;
insertcan only ouput the inserted values - however it's a good suggestion asmergecan accomplish this, I have added it as a suggestion in my answer below.