I dislike the idea of throwing hardware at a problem for anything other than a temporary and immediate way to address a crippling performance issue. The hardest part of the argument is conveying the value of correcting the underlying issues. What is really at play is a scalability issue - which are classically difficult to justify to business stakeholders.
People always think of having to be able to scale up an application, which is what you are doing when you throw hardware at a problem. This form of horizontal scaling has its place, but people neglect to think that there are business cases where applications need to scale down, as well. If your installed base drops and you need to reduce costs, if you have followed the approach of throwing hardware at a problem, there is a very realistic chance that you will not be able to adequately reduce the operational overhead to a point that is required. This is a very real scenario that is especially prevalent with downturns in the economy and service-based web sites.
Chances are that you will not be able to convince the business of the needs to improve the code immediately. This is a lesson that often needs to be learned the hard way, as it is counter for a company to think of contraction over growth. My recommendation, from experience, is to isolate the issues that are causing the problems, and reinvent the architecture around them as a refactoring excercise. For example, if you have a caching issue, start to write a caching framework over several iterations. Once it is completed and tested, start to migrate problematic code to it. If you have written adequate unit tests and have sufficient test coverage, the change will be safe - and if you build up the new architecture in very minimal iterations along with your normal workflow, you can greatly improve your product.
This is considered a "brownfield" approach, whereas a "greenfield" approach is starting from scratch with the intent of implementing a failed or outdated architecture correctly. I personally look at brownfield as a survivability means that could lead to a greenfield in the event that it is beyond fixing.
Additionally, I feel that working in an environment where hardware is more of a commodity than a sound product is dangerous. On a development level, it fosters laziness and instability through risky programming practices. On a business level, in the event the company goes on the market, it can actually hurt the value of the company. Large companies in this scenario often have to let perspective buyers look at the architecture and the underlying code. Depending on the importance of the application (if it is what the company is) it can alter the valuation of the company, or even deter perspective buyers and investors.