If you want to do partition switching, then all indexes MUST be partitioned. There's no way around that. (Well, unless you are prepared to drop the index before the switch and recreate it after, but that probably defies the purpose of partition switching).
So this means that every index must include the partitioning column, which also means that you probably cannot enforce the real uniqueness. I have had implementations where I had to add an EntryDate column to the primary key just so that I could partition by month, and accept that I now no longer can be sure that the "real" key is actually unique. It sucks, but I never found a way around this.