This is indeed an interesting question. I think the easiest way to do this is to create a stored procedure that takes the company name as a parameter and use that stored procedure as the dataset for the Report(s).
You can build the report so that the user can enter the parameter (from a populated list) and then the report will show the data for the selected company(s).
In NAV 6.0 reports in our new role tailered client, will be build on SQL reporting services. You would be able to transform you reporting from the classic NAV client and do the layout in SQL Reporting services, based on a dataset generate by NAV. That way you would be able to solve the issue you mention here.
I had the same problem for a client. We ended up building routine that created a view of each table we needed based off all the indivdual tables and appended the company name. To do it we needed a couple of stored procs that looped through the company table and a customer table that listed the tables we needed. You then write your reports off the view and can use the CompanyName as a part of the where clause.