I would consider the following:
a) if you have access to the DataTable that powers the Table visualization, you can iterate through its columns and create a StringFilter instance for each column. That is, you can automate the creation of StringFilter instances and dashboard assembly. Something like:
var dataTable = ...
var stringFilters = [];
for (var i = 0; i < dataTable.getNumberOfColumns(); i++) {
stringFilters.push(new google.visualization.ControlWrapper({
controlType: 'StringFilter',
...
options: { filterColumnIndex: i , ... }
});
}
var dashboard = new google.visualization.Dashboard();
dashboard.bind(stringFilters, table);
dashboard.draw(dataTable);
b) The StringFilter only requires you to specify its container element. You are free to visually arrange such containers as you prefer (including placing them above the table headers). Placing them inside the visualization (below the table headers) might prove a little trickier, since the table visualization does not allow this kind of customization for the output it produces.
Also, the table uses horizontal scrollbars if you have set an explicit width and the number of columns exceeds that. You have some control over it via options like
scrollLeftStartPosition.