Microsoft Access - performance difference between index and constraint?
Constraints and indexes are two entirely different things.  A constraint defines what can go in the column and an index creates an internal structure to help performance.

-- (1)
create table TestTable (
  ID autoincrement primary key
, F int not null
);


This is part of the table/column definition.  Probably the easiest and most common way to restrict a column from null values.

or:

-- (2)
create table TestTable (
  ID autoincrement primary key
, F int
, constraint cnnF not null (F)
);


This is a constraint.  This will also work but it's really meant for things like making sure a char(1) column only has a Y or an N in it.

or:

-- (3)
create table TestTable (
  ID autoincrement primary key
, F int
);
create index idxF on TestTable (F) with disallow null;


This is an index.  As a side effect it is disallowing null but really it's purpose is is to speed up your queries.

I hate to say it but lazy isn't going to work.  I would put null/not null definitions into the column definition.  Then use constraints on columns where you want to restrict what values go into the column, not if it's null or not.  Then last but not least add indexes where needed for query performance.