Double spending requires 51% of the total computer power, i really don't think someone is going to spend the millions needed to gain 51% to get out of paying for a sandwich.
Either you or I don't understand what 'double-spend' means in Bitcoin. I think that double-spend means issuing two conflicting transactions which would both spend the same bitcoin. It doesn't mean both transactions being accepted into the block chain. Having them both accepted into the block chain would require "51%" (which itself is not even likely to guarantee success; you'd need something more, like maybe 75%, to have a chance of consistently beating everyone else), but you don't need for them both to be accepted into the block chain to successfully execute double-spend fraud. All you need to execute double-spend fraud is to get someone to believe that a transaction that spends a bitcoin is legitimate while getting someone else to believe that a different transaction that spends the same bitcoin is legitimate. Now you've 'spent' the same coin twice, although one of those two (or maybe even both, who knows) will in the end never make it into the block chain and the person who accepted that transaction has been duped.
You don't need any hashing power at all to issue such a double-spend fraud; all you need is for the recipient to accept your transaction at face value without waiting for it to be confirmed multiple times in the bitcoin block chain. And I'm saying that vendors will not accept this risk, so proposals that expect vendors to just accept that transactions will make it into the block chain "eventually" are dead before they even get started.
100tps is less than 500k a second, that's a pitiful amount of bandwidth. Even at 2000tps the average home internet connect (at least where i live) could keep up (bandwidth limits would be an issue, but no one will be running a super-node on a home connection). So, lets assume that you modify your client to allow you to double spend (no mean feat in the first place) then you attempt to double spend, when you broadcast a transaction peers check if that transaction is possible before forwarding it, hence any peer that received your first transaction would detect the conflict and not rebroadcast your second one. So unless you get all new peers your second transaction will stop before it even makes one hop, lets assume you do get new peers, your first transaction has already spread through most of the network, and the majority of peers reject it, meaning that they will reject a block that contains it as well, when this happens it comes down to majority vote, since your first transaction was broadcast first and spread throughout the network and no nodes that received the first transaction propagate the second the first transaction will always have a majority. Even better, stores could set up their clients to alert them when such a vote was in progress, meaning they would be notified if you spend the coins in line and then tried to re-spend them at the counter (the only real way to do this is to spend the coins before you use them to buy goods otherwise the first transaction will always win) they would know instantly that you attempted a double spend. This problem has been fixed.
You expect every merchant to maintain a 500 kbps feed just so that they can accept transactions immediately while at the same time exposing themselves to the risk of double-spend? Not going to happen, ever. This problem has NOT been fixed.
Consider also that even if a merchant did bother to maintain a 500 kbps feed and assumed that just because they did, everyone else was doing the same and that transactions in Bitcoin were just about guaranteed to cross their feed nearly immediately. Now this means that they have to *store* all of those transactions continuously as well, because they never know when someone is going to walk into their store and make a point-of-sale bitcoin purchase for which they'll have to evaluate the transaction to ensure that it's not a double-spend. And in order to do that, they'll have to have a record of all of the outstanding transactions that aren't in blocks yet to know whether or not there was already a transaction that spent the bitcoin in question. In other words, they'll have to remember all transactions not in blocks just to be sure that a user can't just send a bitcoin to himself 5 minutes before sending it to the merchant.
The only sane thing that merchants can do is to trust the block chain. It is a much smaller set of data (one per 10 minutes), much more readily verified, and it already contains all of the work of tracking and filtering out double-spends. THAT IS WHY IT EXISTS. If merchants don't use the block chain then they might as well not require any validation at all.