You might look into using xml expressions to accomplish that complexity in one condition, which I am no expert on. I think QRules could help you here.
I would also consider looking into setting up User Roles. (I use InfoPath 2007, Tools>User Roles. Add a role then name it anything, assign users name from Active Directory, individual or groups or if you haven't alrady set up an admin page on your form to collect current user names and add user names from the form to a role). Create a group of users called Status1234_users or P1P2_Users that includes P1 and P2 users, then you can write individual conditions like:
if current user's role != Status1234_users AND
Status = 1, disable button
----
if current user's role != Status1234_users AND
Status != 2, disable button
--- and so on
Or adjust your logic accordingly and write 6 individual conditions (eliminate the need to use AND and OR entirely). Play around with this to see what happens.
1. if status != 1 AND p1 = currentUser, disable button
2. if status != 2 AND p2 = currentUser, disable button
3. if status != 3 AND p1....
4. if status != 3 AND p2...
5. if status != 4 AND p1...
6. if status != 4 AND p2...
Your question about AND, OR...
The condition you wrote means:
if (a = both b and c) or if (a=d only), do something (your first guess was correct!). :)