Personally, I think 2 is actually your best option. The cons that you outlined I don't see as drawbacks, actually. You can easily add powerful join indexing simply by adding a mandatory index on each extended table on its foreign key:
--Main Table Sample:
CREATE TABLE MainTable
(
accountID INT NOT NULL
, recordID INT NOT NULL
, companyname VARCHAR(100) NOT NULL
, CONSTRAINT PK_MainTable PRIMARY KEY (accountID, recordID)
)
--Example Extended Tables
CREATE TABLE ExTable_Cust1
(
accountID INT NOT NULL
, recordID INT NOT NULL
, someIntField INT NULL
, someTextField TEXT NULL
, CONSTRAINT FK_MainTable_ExTable_Cust1 FOREIGN KEY (accountID, recordID) REFERENCES MainTable (accountID, recordID)
)
--Index on Foreign Key
CREATE NONCLUSTERED INDEX IDX_ExTable_Cust1_MainTable ON ExTable_Cust1 (accountID, recordID)
This will give you a great indexing scheme for table joins, and your ease of maintenance will probably depend on how modular you make your logic to create the extended tables (ie with a standard suffix, etc...)
HTH,
Jay