There are several related questions like this and this. IMHO, all the answers lead to "it's arbitrary".
Maybe you can make a central interface to your contract in order to further control the ordering of the transactions. You can also design your contract in such a way that it does not accept multiple transactions in a single block.
To implement this, you can store the "last" block in a global variable and update it like this:
contract C {
uint lastBlock = 0;
function myFunction(){
if(block.number>lastBlock){
lastBlock = block.number; // update lastBlock
} else if (block.number == lastBlock){
throw; // don't allow if this block already had a transaction
}
// do what the function is supposed to do here
}
}