Depending on your reason for zeroing-out the time...
For me, it's often been so I could compare two dates.  In that case, you're better-off sticking to >=, <= comparisons (avoid =, <>) if you can.  In this way, you can do the comparisons in your WHERE clause without losing the benefit of your index.
If you're on SQl-Server 2008, they have a DATE datatype now (that doesn't include time)
You can use some creative storage format -- for example, a smallint (half the size of a smalldatetime) of YYDDD, where DDD is the Julian date (each day of the year is numbered sequentially from 1 to 365).  This is a smaller datatype, and valid for >,=,< comparisons.  Drawback is having to convert external dates to this format (or visa-versa) before doing a comparrison.
I guess one last thing to consider is preventing time data from getting stored in the first place.
You can also do YEAR(), MONTY(), etc., which will return integer values.  Might not be best for comparing dates, but useful for formatting, etc.