Option (1) should be fine as long as the trigger is efficiently written and there is an index to support the trigger's query. For example, if the table is clustered on ( alarmNumber, ID ) rather than on just ID.
CREATE TRIGGER table_name__trg_insert
ON table_name
INSTEAD OF INSERT
AS
INSERT INTO table_name
SELECT i.eventTime, i.alarmNumber, i.alarmState
FROM inserted i
OUTER APPLY (
SELECT TOP (1) *
FROM table_name tn
WHERE tn.alarmNumber = i.alarmNumber
ORDER BY ID DESC
) AS prev_alarm
WHERE prev_alarm.alarmState <> i.alarmState OR prev_alarm.alarmState IS NULL
GO
SQL DBA,SQL Server MVP(07, 08, 09) "It's a dog-eat-dog world, and I'm wearing Milk-Bone underwear." "Norm", on "Cheers". Also from "Cheers", from "Carla": "You need to know 3 things about Tortelli men: Tortelli men draw women like flies; Tortelli men treat women like flies; Tortelli men's brains are in their flies".