As for the second problem (the # signs)... I cannot think of a way to make it work off the top of my head. If you manually remove the # signs, then you might have problems binding to those fields because the property descriptor is going to be looking for a different field name. As far as I know, I cannot think of any compiled language that allows you to place # signs in the variable identifiers. So, if you change the name completely within the business object, then it won't be able to reference the field correctly through INSERTs and UPDATEs, but if you leave it alone, then it won't be able to correctly compile in .NET.
I think the recommended workaround would probably be to create a view for the table and alias the names differently. You could then build the business object from the view and the business object would no longer think there are # signs in the identifiers. This option would require that the view be the DB2 equivalent of a SQL Server indexed view (to be updatable). If the view cannot be indexed, then you would need to create sprocs for the INSERTs, UPDATEs and DELETEs.