I think you need to experiment with moving the actual enemy hitbox around instead of using multiple detectors. There are a few places where this would save you a lot of objects. Some general tips:
-instead of 4 detectors for left/right/top/bottom, simply shift 1 pixel in each direction, checking for collision each time. You could use 4 values to set these as "colliding", one for each direction, but i use a workaround with one value for left/right and one value for top/bottom: values are reset to 0 before checks. overlapping on left adds 1 to value, overlapping on right adds 2 to value. if value = 1 then object overlaps left. if value = 2 then object overlaps right. if value = 3 then object overlaps on both sides, then do the same for the y value.
-you can shift the hitbox to check for small ledges like in your image using 3 checks: whole hitbox height up, whole hitbox width over, whole hitbox width and height over. you could also ditch a few "chase" detectors using multiple checks this way on horizontal, or if you use a circle, opt instead for a distance check to player.
-if you do need actual external detectors, then you only need one side: just check the left/right direction of your object and move them to the other side as needed
-one set of detectors looped though objects like Gamester suggests is also good practice. add in my suggestion of "swapping sides" with a single direction of objects to make it even more compact.
-hidden triggers in level work great and if they'll save you a few annoying checks or detectors: use them
as to movement: i always use fastloop movement for the actual "core" of any moving object that needs collision.