Join objects (boolean) with different materials
To keep the existing materials on meshes in a boolean operation, simply put the material on those objects on both material lists. For example Cube 1 has Material 01 and Cube 2 has material 02. For those two objects to be joined in a boolean operation and keep their respective materials Cube 1 MUST have Material 01 AND Material 02 in its material list and vice versa. 

Two objects with different material lists:



Now the completed Boolean with the two materials in the one list of Cube 2:



If I did not put both materials in then the original one overwrites the mesh material because the material no longer exists (child material data dissolves in a union operation) so you must make sure the material actually "exists" so that it can stay on the object. Hope that helps :)