OK, so I took some time to modify your project and add what I had suggested. To be honest, I don't completely follow all of your logic, so I didn't do any optimizations like I usually would. I did however, have to move around a few events to get it working. Take a look at the changes and test it out. You may be able to run with it and make it much more streamlined with your methods.
As for your question... Yes, you can combine and/or logic in 1 event. Take a look at event 5. I embedded a simple if/else statement to a set of conditions and wrapped them with an or block. If you don't understand the statement, do a search for "ternary operator" without the quotes. This is a common programming operation and can be used in Construct to simplify a set of if/else events into a single event. Simply put, the first condition says:
if Pos1X equals Pos2X and Pos1Y does not equal Pos2Y then return "True" if not return "False"
The value returned is then tested against the "True" string in the first value. There are many other ways this could have been accomplished but, I have been on a ternary operator kick in my examples lately, so that is what you get.
I hope that clears things up for you and good luck with your project.