As far as I know, your best bet for dynamic columns (headings) is to base the header off its own dataset. The remainder of the dynamic coulumns will then be in a stored procedure or a CLR.
As for the filters, you can filter data right from the properties of the report item that you link to the dataset. the filters can be set according to expressions just like all the other properties. If you open the properties screen on a table element, for example, one of the tabs is for specifying the filters.
Good luck with managing your reports. It seems like managability was not one of their primary design considerations.