No, Ethereum does not have a mechanism for dropping or cancelling transactions automatically. In practice, however, a transaction could be dropped:
Every node part of the blockchain has an internal buffer of pending transactions. As new transactions keep coming in, the buffer might get full and older transactions will be dropped.
So, after a time long enough, if your transaction is still not executed, it will drop of every node's buffer and disappear from the system.
How long? We don't know, it depends on the sizes of the buffers of each nodes.
In doubt, you can resend the exact same transaction (same hash, same nonce, same gas price, etc.) periodically to make sure it re-enters the buffer if it was dropped. Something like once per day should be enough.
For example, let's say you re-send the same transaction, two cases: (1) the transaction was actually dropped so your newly sent transaction is accepted, or (2) the transaction was not dropped yet, so you get an error while trying to override a transaction with same nonce and same gas price (in which case, it's fine, just ignore the error: you know the transaction is not dropped).
And as always, dropped or not, you can always override a non-executed transaction by sending another one with same nonce and higher gas price (high enough).
To sum up: because buffers have limited size, after a time long enough the non-executed transaction will drop from the system, which is the same as being automatically cancelled. The exact duration after which this will happen is unknown. It depends on the amount of transactions sent by other people and the buffers' sizes. -- Any estimate of the time after which this happens is unreliable, but my personal guess is that after a weekmonth the transaction will be dropped.