How can I protect against the failure of a block or symmetric cipher? Can I protect against the failure of a block or symmetric cipher by chaining different techniques together?  If so what implementation details should I be aware of?  

Are some combination of ciphers better or worse than others?

In my case I'm not concerned about the CPU expense, but am more concerned about defending against unintentional programming errors or malicious crypto implementation (in hardware or software).
Unintentional programming errors can be defeated by extensively checking your code against test vectors before releasing it (or better yet, create a self-test routine). Note that this doesn't protect against a malicious attacker circumventing your self-test and inserting his backdoor at runtime, obviously.

Of course, there aren't any test vectors for cipher combos, but you can always create your own by running reference code (presumably, by the cipher designers or some authority like NIST).

As for malicious crypto implementations, there really is no way to know without sifting through the implementation line by line and verifying that nothing that shouldn't be there is, like a socket call to some random IP in a crypto library would probably raise a few eyebrows.

And as for crypto hardware, I think this has come up before a few times - if you can't trust your hardware cryptographic provider, it's game over already. Of course, if you're into that kind of stuff, you could recover the firmware and study it and check it for malicious code, but in general it's more or less a black box that you have to trust.

Your question seems to relate more to the correctness of the implementation (i.e. "getting the right answer") than of how to detect backdoors in crypto code.


  Are some combination of ciphers better or worse than others?


When it comes to ensuring your code doesn't screw up and works fine, it doesn't matter, because of the all-or-nothing property of cryptographic primitives. It doesn't matter if your code screws up a single bit at the beginning, at the end, or at the middle - the result will be garbage in any case (or most of the time - if you are using keystream encryption this may not be true if your key schedule is correct).