The following validations required data from storage
Reject if we already have matching tx in the pool, or in a block in the main branch
Reject if any other tx in the pool uses the same transaction output as one used by this tx
For each input, look in the main branch and the transaction pool to find the referenced output transaction. If the output transaction is missing for any input, this will be an orphan transaction. Add to the orphan transactions, if a matching transaction is not in there already
For each input, if the referenced output has already been spent by a transaction in the main branch, reject this transaction
However, all of these information could be provided up front, we can query for matching tx + prevOuts in one call and can get all of these information. So I think it is not unreasonable to make the query up front and pass it in as an argument