This patch adds a new option to the separate menu in editmode, 'By Material'. It simply loops through all materials in the mesh selects the faces associated with them and calls separate(). Thanks to Andrea Weikert for the patch!