SQL Server 2005 query with multiple conditions, some indexed, some not
Is there a better way to write this type of query?


No, the way you've written it is the "best" way.  Unless, of course, that way doesn't work.  The joy and frustration of using a declarative language is the optimiser.  It is your best friend when it works and worst enemy when it doesn't.

One way to kick the optimiser into doing the right thing is to re-write your query in a semantically identically way such as:

select &lt;whatever&gt;
from table as t
inner join
    (
    Select &lt;primary key columns&gt;
    from table as b
    where b.zip='12345'
    ) as z
    on t.PrimaryKey = z.PrimaryKey  -- repeat if multi-column key
    and t.otherField = 'Y';


Now the optimiser is starting from a different place and may, possibly end up with a different, better, answer. For simple single-table queries I fear it is unlikely to show much change, however.

I would only suggest you try this after you're absolutely sure you've done all you can with indexes.  Re-writing queries in non-obvious ways adds maintenance overhead to the application.  It may also prove counter-productive when you patch or upgrade SQL Server.