The boolean modifier works on separate objects. But is there a way to boolean together multiple pieces of mesh within the same object?
Intersect faces leaves too much messy geometry.
Here's what I would try.
In object mode, make one copy of your original object for each separate part of the original object you want to use as a boolean operator with the original. If the object you want to boolean with itself has more than one mesh sub object, switch to edit mode, select each individual sub-object containing portions you want to use as boolean operators, use the duplicate tool (SHFT-D) to make a copy of the sub-object, and then separate the duplicate of the sub-object into a new object using the P key, choosing the "Selection" option.
You will now have an original and one or more copies of the original, or portions of it. On one of the copies, select the parts of the mesh you want to use to operate on the original, perform the boolean operation, and then delete the copy. Repeat this for each part of the object that you want to use in a boolean operation. When completed you will have effectively used the object to perform the boolean with itself, and yet Blender will be satisfied that you are doing the operation between different objects.