I would use a filtered index:
CREATE INDEX ActiveIx ON tbl(IsActive) WHERE IsActive = 1
to keep down the size of the index. Of course this index can be extended or modified to be on other column. One thing to keep in mind is that if you have other key columns, you still need to have IsActive as an included column:
CREATE INDEX ActiveIx ON tbl(SomeOtherKey) INCLUDE (IsActive) WHERE IsActive = 1
It may seem redudant, and indeed it is, but the optimizer is not able to figure it out.
Partitioning can certainly be an option, but if you have queries which does not include IsActive, they will need to look in both partitions.